import java.util.ArrayList;
import java.util.Random;

public class Card {
    private String suit;
    private String rank;//点数

    public Card() {

    }
    public Card(String suit, String rank){
        this.suit=suit;
        this.rank=rank;
    }

    public String getSuit(){
        return this.suit;
    }
    public void setSuit(String suit){
        this.suit=suit;
    }

    public String getRank() {
        return rank;
    }
    public void setRank(String rank) {
        this.rank = rank;
    }

    @Override
    public String toString(){
        return this.suit+this.rank;
    }

    //创建一副扑克牌
    public static ArrayList<Card> creatDeck() {
        ArrayList<Card> deck = new ArrayList<>();
        String[] suits = {"♠", "♥", "♦", "♣"};
        for (String suit : suits) {
            for (int i = 2; i <= 10; i++) {//在每个花色中，生成对应点数的牌   "♠", "♥", "♦", "♣"都有2-10
                Card card = new Card(suit, "" + i);
                deck.add(card);
            }
            Card cardJ=new Card(suit,"J");
            Card cardQ=new Card(suit,"Q");
            Card cardK=new Card(suit,"K");
            Card cardA=new Card(suit,"A");
            deck.add(cardJ);
            deck.add(cardQ);
            deck.add(cardK);
            deck.add(cardA);
        }
        return deck;
    }

    //自己实现洗牌
    public static void shuffle(ArrayList<Card> deck){
        //把整个ArrayList从后往前（从前往后）遍历，每次取道一张牌就生成一个随机下标，将当前位置的牌与随机下标位置的牌进行交换
        Random random=new Random();
        for (int i = deck.size()-1; i >=0 ; i--) {
            int j=random.nextInt(deck.size());//生成【0，size）的随机整数
            //交换两张牌的位置
            Card temp=new Card(deck.get(i).getSuit(),deck.get(i).getRank());
            deck.set(i,deck.get(j));//前
            deck.set(j,temp);//后
        }
    }

    //发牌（假设有三个人，每人发5张牌
    public static ArrayList<ArrayList<Card>> deal(ArrayList<Card> deck){
        ArrayList<ArrayList<Card>> hands=new ArrayList<>();//三个人的手牌都放在hands里，hands的底层是一个二维数组
        //先创建三个人手中的牌，每个人手中的牌都是一个顺序表，存储的类型为Card
        for(int i=0;i<3;i++){
            ArrayList<Card> hand=new ArrayList<>();
            hands.add(hand);
        }
        for (int i = 0; i < 5; i++) {//第一次每人发一张，第二次每人一张。。第五次每人一张，然后每人就有5张l
            for (int j = 0; j < 3; j++) {
                //发牌是一个轮流的过程
                ArrayList<Card> currentCard=hands.get(j);//给第j个人发牌
                Card card=deck.remove(0);//把第1张牌发给第j个人
                currentCard.add(card);//第j个人拿到了第一张牌，加入到ta手里去
            }
        }
        return hands;
    }

}
